
#ifndef GPSTK_CommonHeader_HPP
#define GPSTK_CommonHeader_HPP

#include <utility>
#include <vector>
#include <set>
#include <map>
#include <string>

#include "DataStructures.hpp"

#include "BLQDataReader.hpp"
#include "AntexReader.hpp"
#include "TropModel.hpp"
#include "SolarSystem.hpp"
#include "LeapSecStore.hpp"
#include "EOPDataStore.hpp"

#include "ReferenceSystem.hpp"

#include "SP3EphemerisStore.hpp"
#include "Rinex3EphemerisStore2.hpp"
#include "DCBDataReader.hpp"
#include "MGEXDCBReader.hpp"
#include "MSCStore.hpp"
#include "IFCBStore.hpp"


namespace gpstk
{

       //
       // GNSS data headers
    struct commonHeader
    {


          /// Filed containing the file/class pointers which
          /// will transfer data between difference process class.
       EOPDataStore*          pEOPStore;
       LeapSecStore*          pLeapSecStore;
       SolarSystem*           pSolarSys;
       AntexReader*           pAntexReader;
       BLQDataReader*         pBLQReader;
       ViennaTropModel*       pViennaTM;
       ReferenceSystem*       pRefSys;

       SP3EphemerisStore*     pSP3Store;
       Rinex3EphemerisStore2* pNAVStore;
       MGEXDCBReader*         pMGEXDCBStore;
       DCBDataReader*         pDCBStore;
       IFCBStore*             pIFCBStore;
       MSCStore*              pMSCStore;

       satYawDataMap          satYawData;
       satVectorMap           satOrbitData;
       satValueMap            satClockData;

          /// Default constructor
       commonHeader()
           : pEOPStore(NULL),
             pLeapSecStore(NULL),
             pSolarSys(NULL),
             pAntexReader(NULL),
             pBLQReader(NULL),
             pViennaTM(NULL),
             pRefSys(NULL),
             pSP3Store(NULL),
             pNAVStore(NULL),
             pMGEXDCBStore(NULL),
             pDCBStore(NULL),
             pMSCStore(NULL)
       {};


          /// Copy constructor
       commonHeader(const commonHeader& eh)
           : pEOPStore(eh.pEOPStore),
             pLeapSecStore(eh.pLeapSecStore),
             pSolarSys(eh.pSolarSys),
             pAntexReader(eh.pAntexReader),
             pBLQReader(eh.pBLQReader),
             pViennaTM(eh.pViennaTM),
             pRefSys(eh.pRefSys),
             pSP3Store(eh.pSP3Store),
             pNAVStore(eh.pNAVStore),
             pMGEXDCBStore(eh.pMGEXDCBStore),
             pDCBStore(eh.pDCBStore),
             pMSCStore(eh.pMSCStore),
             satYawData(eh.satYawData),
             satOrbitData(eh.satOrbitData),
             satClockData(eh.satClockData)
       {};


          /// Assignment operator
       virtual commonHeader& operator=(const commonHeader& right);


          /// Destructor
       virtual ~commonHeader() {};


    }; // End of struct 'commonHeader'

}

#endif // GPSTK_CommonHeader_HPP
